Android性能测试之GPU |
您所在的位置:网站首页 › 安卓 GPU设置 › Android性能测试之GPU |
卡顿 卡顿产生的原因: 1、CPU资源消耗原因;2、GPU资源消耗原因。 CPU上文已经阐述,接下来说一下GPU。一般安卓流畅度测试,关注图片处理器每秒刷新的帧数(FPS),他用来指示页面是否平滑的渲染。高的帧率可以得到更流畅,更逼真的动画,不过帧率达到60fps以上,人眼主观感受到的差别就不大了。所以以60fps作为衡量标准,即要求每一帧刷新的时间小于16ms,这样才能保证滑动中平滑的流畅度。 备注:GPU呈现模式用来测量app的帧速率,属于GPU,Profile工具的一种.目前安卓基础60fps以满帧数计算,60fps在一秒没绘制造成,所以可以计算出1÷60≈1.66(绘制每帧需要的时间约为16ms) 1、GPU呈现模式分析(Peofile GPU Rendering tool) 测试方法: a、点击Android设备的“设置”->"开发者选项",然后勾选“GPU呈现模式分析”。 b、打开开发者选项后勾选”GPU呈现模式分析”后选择“屏幕上显示为条形图”这样可以直观的看出每个时间点的帧数大小。如下图: 当你的应用程序在运行时,你会看到一排柱状图在屏幕上,从左到右动态地显示,每一个垂直的柱状图代表一帧的渲染,越长的垂直柱状图表示这一帧需要渲染的时间越长.随着需要渲染的帧数越来越多,他们会堆积在一起,这样你就可以观察到这段时间帧率的变化。 参数介绍如下: l绿色水平线代表16ms,要确保一秒内打到60fps,你需要确保这些帧的每一条线都在绿色的16ms标记线之下.任何时候你看到一个竖线超过了绿色的标记现,你就会看到你的动画有卡顿现象产生. l蓝色代表测量绘制的时间,或者说它代表需要多长时间去创建和更新你的DisplayList.在Android中,当你看到蓝色的线很高的时候,有可能是因为你的一堆视图突然变得无效了(即需要重新绘制),或者你的几个自定义视图的onDraw函数过于复杂. l红色代表执行的时间,这部分是Android进行2D渲染Display List的时间,为了绘制到屏幕上,Android需要使用OpenGl ES的API接口来绘制Display List.这些API有效地将数据发送到GPU,最总在屏幕上显示出来. l橙色部分表示的是处理时间,或者说是CPU告诉GPU渲染一帧的时间,这是一个阻塞调用,因为CPU会一直等待GPU发出接到命令的回复,如果柱状图很高,那就意味着你给GPU太多的工作,太多的负责视图需要OpenGL命令去绘制和处理. c、如果需要分析具体详细的数据,需要结合下面的命令来进行,选择显示于adb shell dumpsys gfxinfo来使用,然后输入:adb shell dumpsys gfxinfo"你自己的应用名字" > fps.txt后,在电脑中找到fps.txt文件,找到"Profile datain ms"的Draw Process Exceute这三列数据,Excel做出表格,sum出每列的总GPU时间,如图: lDraw对应于蓝色线:是消耗在构建java显示列表DisplayList的时间。说白了就是执行每一个View的onDraw方法,创建或者更新每一个View的DisplayList对象的时间。 lProcess对应于红色线:是消耗在Android的2D渲染器执行显示列表的时间。你的视图层次越多,要执行的绘图命令就越多。 lExecute对应于橙色线:是消耗在排列每个发送过来的帧的顺序的时间.或者说是CPU告诉GPU渲染一帧的时间,这是一个阻塞调用,因为CPU会一直等待GPU发出接到命令的回复。 2、FPS Meter测试安卓帧数 FPSMeter是一款非常实用的小软件,能够用数字实时显示安卓界面的每秒帧数,非常直观。此外,FPS Meter还可以显示最大帧数、最小帧数以及平均帧数。由于涉及到了系统功能,所以FPSMeter需要root。如果你打算尝试,请先root机后再使用。开启服务后,即可看到有帧数显示于界面上。这里要注意,使用FPS Meter测量帧数需要在开发者选项中停用HW叠加层才会比较准确。 3、在程序种画一个圆点,计算圆点1秒绘制次数 贴吧目前记录FPS值的方法是,在程序中创建仅有一个圆点的view,然后计算该view每秒被绘制的次数。理想值:1秒绘制60次 4、AndroidStudio自带GPU测功能 如下图,AndroidStudio自带GPU监控功能,纵轴表示每桢绘制的时间,横轴是运行时间。 上述四种方法就是测试FPS流畅度的常用方法。当QA发现有卡顿问题时,可以从以下几点着手分析,逐一排查。 1、内存占用过多,GC次数高,阻塞主线程; 2、主线程做了些无关的耗时操作,eg:在滑动过程中打日志,访问过多io; 3、过度渲染,渲染层级太多或者次数太多,导致渲染时间长eg:滑动过程中,动画导致整个列表重新绘制; 4、创建view时,过多的动态创建或者复杂页面创建时间过长。eg:五楼图文直播轮播卡片。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |